package android.admin.db;





import java.util.ArrayList;



import android.admin.razredi.Kategorija;
import android.admin.razredi.Lokacija;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBHelper {
	
	private SQLiteDatabase db; // a reference do baze
	private final String DB_NAME = "database_android"; // ime baze
	private final int DB_VERSION = 1; // verzija baze

	// imena stolpcev v bazi
	private final String TABELA1_IME = "database_kategorija";
	private final String TABELA_STOLPEC_IDkategorija = "_idKategorija";
	private final String TABELA_STOLPEC_nazivK = "_naziv";
	private final String TABELA_STOLPEC_nadkategorija = "_nadkategorija";
	
	private final String TABELA2_IME = "database_lokacija";
	private final String TABELA_STOLPEC_IDlokacija = "_idLokacija";
	private final String TABELA_STOLPEC_nazivL = "_naziv";
	private final String TABELA_STOLPEC_opisL = "_opis";
	private final String TABELA_STOLPEC_xL = "_x";
	private final String TABELA_STOLPEC_yL = "_y";
	private final String TABELA_STOLPEC_kategorijaID = "_kategorijaId";
	
	private final String TABELA3_IME = "database_dogodek";
	private final String TABELA_STOLPEC_idDogodek = "_idDogodek";
	private final String TABELA_STOLPEC_nazivD = "_naziv";
	private final String TABELA_STOLPEC_opisD = "_opis";
	private final String TABELA_STOLPEC_datum = "_datum";
	private final String TABELA_STOLPEC_xD = "_x";
	private final String TABELA_STOLPEC_yD = "_y";
	private final String TABELA_STOLPEC_kategorijaIDD = "_kategorijaId";
	
	class DBmanager extends SQLiteOpenHelper {

		
		public DBmanager(Context context) {
			// super(context, name, factory, version);
			super(context, DB_NAME, null, DB_VERSION);
			// TODO Auto-generated constructor stub
		}
		@Override
		public void onCreate(SQLiteDatabase db) {
			try {
				//CREATE TABLE database_tabela ( id int primary key,tabela_stolpec_ena int,tabela_stolpec_dva text);
				String table="create table " + TABELA1_IME + " ("+
				TABELA_STOLPEC_IDkategorija + " integer primary key autoincrement,"+
				TABELA_STOLPEC_nazivK+ " text,"+
				TABELA_STOLPEC_nadkategorija+ " int)";
				db.execSQL(table);
				
				table="create table " + TABELA2_IME + " ("+
				TABELA_STOLPEC_IDlokacija + " integer primary key autoincrement,"+
				TABELA_STOLPEC_nazivL+ " text,"+
				TABELA_STOLPEC_opisL+ " text,"+
				TABELA_STOLPEC_xL+ " text,"+
				TABELA_STOLPEC_yL+ " text,"+
				TABELA_STOLPEC_kategorijaID+ " int)";
				db.execSQL(table);
				
				table="create table " + TABELA3_IME + " ("+
				TABELA_STOLPEC_idDogodek + " integer primary key autoincrement,"+
				TABELA_STOLPEC_nazivD+ " text,"+
				TABELA_STOLPEC_opisD+ " text,"+
				TABELA_STOLPEC_datum+ " text,"+
				TABELA_STOLPEC_xD+ " text,"+
				TABELA_STOLPEC_yD+ " text,"+
				TABELA_STOLPEC_kategorijaIDD+ " int)";
				db.execSQL(table); 
				
			} catch (SQLException e) {
				Log.e("DBHelper onCreate  ","Error creating table "+e.getMessage());
			}
		}
		
		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			db.execSQL("drop table "+TABELA1_IME+", "+TABELA2_IME+", "+ TABELA3_IME);
			this.onCreate(db);
		}

	}
	 Context context;
		private  DBmanager dbManager; //obstaja naj le ena instanca baze

		public DBHelper(Context context) {
			this.context=context;
			
		}
		
		public void close(){ //poskrbimo za zapiranje baze
			this.dbManager.close();
		}
		
		public void open(){
			
			try {
				this.dbManager = new DBmanager(context);
				db = this.dbManager.getWritableDatabase();
			} catch (SQLException e) {
				// TODO: handle exception
				Log.e("DBHelper ","Error openning db "+e.getMessage());
			}
		}
	
		
		public Boolean dodajKategorijo(String naziv,int nadkategorija, String nazivL, String opisL, String x, String y){
			
			int idKategorija =getZadnjiIDkategorija()+1;
			ContentValues initialValues = new ContentValues();
			initialValues.put(TABELA_STOLPEC_IDkategorija, idKategorija);
			initialValues.put(TABELA_STOLPEC_nazivK,naziv);	
			initialValues.put(TABELA_STOLPEC_nadkategorija,nadkategorija);
			getZadnjiIDkategorija();

			dodajLokacijo(idKategorija,  nazivL, opisL, x,y);
			
			return db.insert(TABELA1_IME,null, initialValues)>0;
		}


		private Boolean dodajLokacijo(int idKategorija,  String nazivL, String opisL, String x, String y) {
			
			int idLokacija= getZadnjiIDlokacija()+1;
			ContentValues initialValues = new ContentValues();
			initialValues.put(TABELA_STOLPEC_IDlokacija, idLokacija);
			initialValues.put(TABELA_STOLPEC_nazivL,nazivL);
			initialValues.put(TABELA_STOLPEC_opisL,opisL);
			initialValues.put(TABELA_STOLPEC_xL,x);	
			initialValues.put(TABELA_STOLPEC_yL,y);
			initialValues.put(TABELA_STOLPEC_kategorijaID,idKategorija);
			
			return db.insert(TABELA2_IME,null, initialValues)>0;
		}
		
	public int getZadnjiIDkategorija()
	{
		int zadnjiID=0;
		String query = "SELECT _idKategorija from database_kategorija order by _idKategorija DESC limit 1";
		Cursor c = db.rawQuery(query,null);
		if (c != null && c.moveToFirst()) {
			zadnjiID = c.getInt(0); //The 0 is the column index, we only have 1 column, so the index is 0
		}
		
		
	 return zadnjiID;	
	}
	
	public int getZadnjiIDlokacija()
	{
		int zadnjiID=0;
		String query = "SELECT _idLokacija from database_lokacija order by _idLokacija DESC limit 1";
		Cursor c = db.rawQuery(query,null);
		if (c != null && c.moveToFirst()) {
			zadnjiID = c.getInt(0); //The 0 is the column index, we only have 1 column, so the index is 0
		}
		
		
	 return zadnjiID;	
	}
	
	
	public Cursor vrniNadkategorije() {


		Cursor cursor = db.query(TABELA1_IME, new String[] {
				TABELA_STOLPEC_IDkategorija+" AS _id", TABELA_STOLPEC_nazivK}, TABELA_STOLPEC_nadkategorija
				+ " IS null", null,// selectionArgs,
				null,// groupBy,
				null,// having,
				null// orderBy
				);

		if (cursor != null)
			cursor.moveToFirst();
		else
			System.out.println("cursor je null");
		return cursor;
	}
	
	
	public Cursor vrniPodkategorije(int idNadkategorije)
	{
		

		Cursor cursor=db.query(TABELA1_IME,
				new String[]{TABELA_STOLPEC_IDkategorija,TABELA_STOLPEC_nazivK, TABELA_STOLPEC_nadkategorija},
				TABELA_STOLPEC_nadkategorija+"="+idNadkategorije,
				null,//selectionArgs,
				null,//groupBy,
				null,//having,
				null//orderBy
				);
		
		if (cursor != null)
			cursor.moveToFirst();
		else
			System.out.println("cursor je null");
		return cursor;
	}
	
	public Lokacija vrniLokacijo(int idKategorije)
	{
		Cursor cursor=db.query(TABELA2_IME,
				new String[]{TABELA_STOLPEC_IDlokacija,TABELA_STOLPEC_nazivL, TABELA_STOLPEC_opisL, TABELA_STOLPEC_xL, TABELA_STOLPEC_yL, TABELA_STOLPEC_kategorijaID},
				TABELA_STOLPEC_kategorijaID+"="+idKategorije,
				null,//selectionArgs,
				null,//groupBy,
				null,//having,
				null//orderBy
				);
		
		Lokacija lokacija = new Lokacija();
		
		for(cursor.moveToFirst(); cursor.moveToNext(); cursor.isAfterLast()) {
			lokacija.setIdLokacija(cursor.getInt(0));
			lokacija.setNaziv(cursor.getString(1));
			lokacija.setOpis(cursor.getString(2));
			lokacija.setX(cursor.getString(3));
			lokacija.setY(cursor.getString(4));
			lokacija.setKategorijaID(cursor.getInt(5));
		}
		return lokacija;
	}
	

	
}
